package AssetCategory

import (
	"ToolLibray/jwtx"
	"context"
	"property_service/property_service"

	"property_api/internal/svc"
	"property_api/internal/types"
	"property_api/utils/result"
	"property_api/utils/xform"

	"github.com/zeromicro/go-zero/core/logx"
)

type EditLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func NewEditLogic(ctx context.Context, svcCtx *svc.ServiceContext) *EditLogic {
	return &EditLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

// Edit 修改资产分类的逻辑
func (l *EditLogic) Edit(req *types.AssetCategoryEdit) (resp *types.Response, err error) {
	// 设置租户ID，从上下文中获取
	tenantID := jwtx.GetUserTenantId64(l.ctx)
	// 设置更新用户，从上下文中获取
	userIdStr := xform.Int64ToString(jwtx.GetUserId(l.ctx))

	//通过品牌id查找，并赋值
	if req.BrandID != 0 {
		x, err := l.svcCtx.BasicService.BrandAdditionPage(l.ctx, &property_service.BrandAdditionPageReq{
			Page:  0, // 当前页码
			Limit: 0, // 每页条数
			Where: &property_service.BrandAddition{
				ID:       req.BrandID, // 记录ID
				TenantID: tenantID,    //租户ID
			},
		})
		//报错后台输出
		if err != nil {
			return result.Err(err).End()
		}
		//如果找到，则赋值品牌
		if len(x.List) > 0 {
			req.BrandName = x.List[0].BrandName
		}
	}

	//通过生产厂商id查找，并赋值
	if req.ManufacturerID != 0 {
		x, err := l.svcCtx.BasicService.VendorInfoPage(l.ctx, &property_service.VendorInfoPageReq{
			Page:  0, // 当前页码
			Limit: 0, // 每页条数
			Where: &property_service.VendorInfo{
				TenantID: tenantID,           //租户ID
				ID:       req.ManufacturerID, // 记录ID
			},
		})
		//报错后台输出
		if err != nil {
			return result.Err(err).End()
		}
		//如果找到，则赋值生产厂商
		if len(x.List) > 0 {
			req.ManufacturerName = x.List[0].Name
		}
	}

	//通过财务分类id查找，并赋值
	if req.FinancialCategoryID != 0 {
		x, err := l.svcCtx.BasicService.AssetFinancialCategoryPage(l.ctx, &property_service.AssetFinancialCategoryPageReq{
			Page:  0, // 当前页码
			Limit: 0, // 每页条数
			Where: &property_service.AssetFinancialCategory{
				ID:       req.FinancialCategoryID, // 记录ID
				TenantID: tenantID,                //租户ID
			},
		})
		//报错后台输出
		if err != nil {
			return result.Err(err).End()
		}
		//如果找到，则赋值财务分类
		if len(x.List) > 0 {
			req.FinancialCategoryName = x.List[0].CategoryName
		}
	}

	//通过资产类型id查找，并赋值
	if req.AssetTypeID != 0 {
		x, err := l.svcCtx.BasicService.AssetCategoryPage(l.ctx, &property_service.AssetCategoryPageReq{
			Page:  0, // 当前页码
			Limit: 0, // 每页条数
			Where: &property_service.AssetCategory{
				ID:       req.AssetTypeID, // 记录ID
				TenantID: tenantID,        //租户ID
			},
		})
		//报错后台输出
		if err != nil {
			return result.Err(err).End()
		}
		//如果找到，则赋值资产类型
		if len(x.List) > 0 {
			req.AssetTypeName = x.List[0].Name
		}
	}

	// 调用服务层方法，修改资产分类记录
	res, err := l.svcCtx.BasicService.AssetCategoryEdit(l.ctx, &property_service.AssetCategory{
		ID:                    req.ID,                    // 记录ID
		TenantID:              tenantID,                  // 租户ID
		ParentID:              req.ParentID,              // 父级ID
		ParentCode:            req.ParentCode,            //父级编码
		ParentLs:              req.ParentLs,              // 父级列表
		CategoryCode:          req.CategoryCode,          // 分类编号
		CustomCodeFlag:        req.CustomCodeFlag,        // 编号规则
		Name:                  req.Name,                  // 分类名称
		PinyinCode:            req.PinyinCode,            // 拼音简码
		DepreciationMonths:    req.DepreciationMonths,    // 折旧年限
		ManufacturerID:        req.ManufacturerID,        // 生产厂商ID
		ManufacturerName:      req.ManufacturerName,      // 生产厂商名称
		FinancialCategoryID:   req.FinancialCategoryID,   // 财务分类id
		FinancialCategoryName: req.FinancialCategoryName, // 财务分类名称
		BrandID:               req.BrandID,               // 品牌id
		BrandName:             req.BrandName,             // 品牌名称
		Status:                req.Status,                // 状态
		StatusName:            req.StatusName,            // 状态名称
		UnitPrice:             req.UnitPrice,             // 单价
		Unit:                  req.Unit,                  // 单位
		IsComponent:           req.IsComponent,           // 部件标志
		NeedMaintenance:       req.NeedMaintenance,       // 预防性维护
		Remark:                req.Remark,                // 备注
		StockID:               req.StockID,               // 仓库ID
		UpdatedAtuser:         userIdStr,                 // 更新人
		AssetTypeID:           req.AssetTypeID,           //资产类型id
		AssetTypeName:         req.AssetTypeName,         //资产类型名称
	})

	// 如果服务层返回错误，返回统一的错误响应
	if err != nil {
		return result.Err(err).End()
	}

	// 返回成功的响应
	return result.Suc(res).End()
}
